<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>闭包计数练习</title>
		<script>
			//简单闭包
			var a = 10;
			function bao(){
				console.log(a);
			}
			bao();
			//复杂闭包
			function f1() {
				var num = 1;//局部变量
				function f2(){
					alert(num);
				}//闭包 内层函数
				return f2;//千万别带小括号
			}
			var result = f1();//申明一个变量存储外层函数的调用，此处有（），存储的是闭包，即内层函数
			result();//调用
			
		</script>
	</head>
	<body>
		<button>全局变量来计数</button>
		<button>局部变量来计数</button>
		<button>闭包来计数</button>
		<script>
			//获取节点
			var btn = document.getElementsByTagName("button");
			console.log(btn);//检测节点是否被获取
			//全局变量计数器 弊端：任何地方都可以更改全局变量，更改后，点击计数就不准确
			//申明一个变量来计数
		var count=0;
			btn[0].onclick = function(){
					count++;					
					console.log(count);
		}
			count=8;//改变了count的值  计数就不准确了	
	
	
			//局部变量计数器
		    btn[1].onclick = function(){
		    	var count=0;
		    	count++;
		    	console.log(count);
		    }//一直使用的是初始值 count一直是1；
		    
		    //闭包计数器
		   function wai(){
	           var count=0;
	           function nei(){
	           	count++;
	           	console.log(count);
	           }
	           return nei;
		   }
		    var res = wai();
		    btn[2].onclick = function(){
		    	res();
		    }
		</script>
		
	</body>
</html>
